www.gusucode.com > XerCMS 携云PHP企业建站程序 v2015PHP源码程序 > XerCMS 携云PHP企业建站程序 v2015/XerCMS_v20150724/XerCMS_v20150724/XerCMS/Services/admin/libs/model/XerCMS_model_struct.php
<?php /** * @name XERCMS * @author Arno <XerCMS@163.com> [QQ:1328013] * @version 1.0.0 * @link http://www.XerCMS.com */ !defined('XERCMS') && exit('Access Denied'); class Struct { //static $_unsigned = array('int','tinyint','smallint'); //static $_null = array('int','tinyint','smallint','varchar','char','text'); static $Type = array('text'=>'文本框','date'=>'日期类型','float'=>'小数型','int'=>'整数型','number'=>'数字字符' ,'english'=>'英文字符','email'=>'E-mail','phone'=>'电话号码','upload'=>'上传','radio'=>'单选项','checkbox'=>'多选项','select'=>'下拉选项','html'=>'编辑器(HTML)','textarea'=>'文本区','json'=>'JSON格式'); static function retable($old,$new) { //兼容 $old['id'] = isset($old['id']) ? $old['id'] : $new['id']; if(empty($new['table'])) { return; } if(strpos($old['table'],'data_') === 0) { $old['table'] = explode('_',$old['table'],2); $old['table'] = $old['table'][1]; } if($new['table'] != $old['table']) { rename(INC.'config/model/'.$old['table'].'.php',INC.'config/model/'.$new['table'].'.php'); DB::query('ALTER TABLE `xercms_data_'.$old['table'].'` RENAME TO `xercms_data_'.$new['table'].''); } //if($new['name'] != $old['name']) { DB::update('xercms_model',array('name'=>$new['name']),'id = \''.$old['id'].'\''); //} dfile('XerCMS/config/model/'.$new['table'].'.php','<?php !defined(\'xercms\') && exit(\'Access Denied\');return '.AtoS(array_merge(array('0'=>array('table'=>'data_'.$new['table'],'url'=>'?id={id}&model='.$new['table'])),(array)$new['struct'])).';?>'); } static function Cache($id) { $model = DB::result('SELECT * FROM xercms_model WHERE id = '.$id); if(isset($model['table'])) { unset($model['uid'],$model['time']);unset($model['template']); $model['struct'] = json_decode($model['struct'],true); if($model['struct']){ foreach($model['struct'] as $k=>$v) { if(strlen($v['range']) == 0) { if($v['type'] == 'int') { $v['range'] = '1-1000000000'; } else if ($v['type'] == 'float') { $v['range'] = '1.00-1000000000.00'; } else $v['range'] = '0-300'; } if ($v['type'] == 'float') { $model['struct'][$k]['range'] = explode('-',$v['range']); $model['struct'][$k]['range'][0] = (float)$model['struct'][$k]['range'][0]; if(isset($model['struct'][$k]['range'][1])) { $model['struct'][$k]['range'][1] = (float)$model['struct'][$k]['range'][1]; } } else { $model['struct'][$k]['range'] = explode('-',$v['range']); $model['struct'][$k]['range'][0] = (int)$model['struct'][$k]['range'][0]; if(isset($model['struct'][$k]['range'][1])) { $model['struct'][$k]['range'][1] = (int)$model['struct'][$k]['range'][1]; } } } } dfile('XerCMS/Data/archives/model/'.$model['table'].'.php','<?php !defined(\'XERCMS\') && exit(\'Access Denied\');return '.AtoS($model).';?>'); } } static function filter($data) { foreach($data as $k=>$v) { $data[$k] = strtr($v,array('\''=>'','\\'=>'','"'=>'')); } return $data; } static function editField($id,$name,$data) { $data['range'] = strlen($data['range']) == 0 ? '0' : $data['range']; $data['range'] = explode('-',$data['range']); $data['range'][0] = $data['type'] == 'float' ? (float)$data['range'][0] : (int)$data['range'][0]; if($data['range'][0] < 0) { $data['range'][0] = 0; } if(isset($data['range'][1]) && $data['range'][1] < $data['range'][0]) { $data['range'][1] = $data['range'][0] + 1; } else $data['range'][1] = $data['type'] == 'float' ? (float)$data['range'][1] : (int)$data['range'][1]; if($data['type'] == 'int' || $data['type'] == 'float') { $data['length'] = strlen($data['range'][0]); if(isset($data['range'][1]) && $data['length'] < strlen($data['range'][1])) { $data['length'] = strlen($data['range'][1]); } } else { if(isset($data['range'][1]) && $data['range'][1] > $data['range'][0]) { $data['length'] = $data['range'][1]; } else $data['length'] = $data['range'][0]; } $data['range'] = implode('-',$data['range']); if($data['length'] <= 0) $data['length'] = 1; if($data['index'] != 1 && $data['index'] != 2) { $data['index'] = 0; } if($data['required'] != 1) { $data['required'] = 0; } if($data['length'] < 0) $data['length'] = 1; if ($data['type'] == 'html') { if($data['length'] >= 16777215) { $type = 'LONGTEXT'; } else if($data['length'] > 65535) { $type = 'MEDIUMTEXT'; } else { $type = 'TEXT'; } $default = ''; } else if ($data['type'] == 'date') { $type = 'INT('.($data['length'] > 11 || $data['length'] < 1 ? 11 : $data['length']).')'; if(isset($data['default']) && !empty($data['default'])) { $data['default'] = (int)$data['default'];$default = ' DEFAULT \''.$data['default'].'\''; } else $default = ' DEFAULT 0'; } else if ($data['type'] == 'int') { $type = 'INT('.($data['length'] > 11 || $data['length'] < 1 ? 11 : $data['length']).')'; if(isset($data['default']) && !empty($data['default'])) { $data['default'] = (int)$data['default'];$default = ' DEFAULT \''.$data['default'].'\''; } else $default = ' DEFAULT 0'; } else if ($data['type'] == 'float') { $type = 'FLOAT'; if(isset($data['default']) && !empty($data['default'])) { $data['default'] = (float)$data['default'];$default = ' DEFAULT \''.$data['default'].'\''; } else $default = ' DEFAULT NULL'; } else { if($data['length'] >= 16777215) { $type = 'LONGTEXT'; } else if($data['length'] > 65535) { $type = 'MEDIUMTEXT'; } else if($data['length'] >= 21812) { $type = 'TEXT';$default = ''; } else { $type = 'VARCHAR('.($data['length'] < 2 ? 255 : $data['length']).')'; $default = isset($data['default']) ? ' DEFAULT \''.$data['default'].'\'' : ''; } } $model = DB::result('SELECT * FROM xercms_model WHERE id = '.$id); if(isset($model['struct'])) { $model['struct'] = json_decode($model['struct'],true); if(in_array($type,array('LONGTEXT','MEDIUMT','TEXT'))) { if($model['struct'][$data['name']]['index'] != 0) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` DROP INDEX `'.$data['name'].'` '); $data['index'] = 0;$model['struct'][$data['name']]['index'] = 0; } } if($data['name'] != $name || $model['struct'][$data['name']]['type'] != $data['type'] || $model['struct'][$data['name']]['length'] != $data['length']) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` CHANGE `'.$name.'` `'.$data['name'].'` '.$type.$default); } if($model['struct'][$data['name']]['index'] !== $data['index']) { if($model['struct'][$data['name']]['index'] == 0) { if($data['index'] == 1) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD UNIQUE ( `'.$data['name'].'` )'); } else if ($data['index'] == 2) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD INDEX ( `'.$data['name'].'` )'); } } else { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` DROP INDEX `'.$data['name'].'` '); if($data['index'] == 1) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD UNIQUE ( `'.$data['name'].'` )'); } else if ($data['index'] == 2) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD INDEX ( `'.$data['name'].'` )'); } } } if($data['name'] != $name) { unset($model['struct'][$name]); } $model['struct'][$data['name']] = $data; DB::update('xercms_model',array('struct'=>jsonSql($model['struct'])),array('id'=>$id)); self::Cache($id); } return $data; } static function AddField($id,$data) { $data['range'] = strlen($data['range']) == 0 ? '0' : $data['range']; $data['range'] = explode('-',$data['range']); $data['range'][0] = $data['type'] == 'float' ? (float)$data['range'][0] : (int)$data['range'][0]; if($data['range'][0] < 0) { $data['range'][0] = 0; } if(isset($data['range'][1]) && $data['range'][1] < $data['range'][0]) { $data['range'][1] = $data['range'][0] + 1; } else $data['range'][1] = $data['type'] == 'float' ? (float)$data['range'][1] : (int)$data['range'][1]; if($data['type'] == 'int' || $data['type'] == 'float') { $data['length'] = strlen($data['range'][0]); if(isset($data['range'][1]) && $data['length'] < strlen($data['range'][1])) { $data['length'] = strlen($data['range'][1]); } } else { if(isset($data['range'][1]) && $data['range'][1] > $data['range'][0]) { $data['length'] = $data['range'][1]; } else $data['length'] = $data['range'][0]; } $data['range'] = implode('-',$data['range']); $data['length'] = (int)$data['length']; if($data['length'] <= 0) $data['length'] = 1; if($data['index'] != 1 && $data['index'] != 2) { $data['index'] = 0; } if($data['required'] != 1) { $data['required'] = 0; } if ($data['type'] == 'html') { if($data['length'] >= 16777215) { $type = 'LONGTEXT'; } else if($data['length'] > 65535) { $type = 'MEDIUMTEXT'; } else { $type = 'TEXT'; } $default = ''; } else if ($data['type'] == 'date' || $data['type'] == 'int') { $type = 'INT('.($data['length'] > 11 || $data['length'] <= 0 ? 11 : $data['length']).')'; if(isset($data['default']) && !empty($data['default'])) { $data['default'] = (int)$data['default'];$default = ' DEFAULT \''.$data['default'].'\''; } else $default = ' DEFAULT 0'; } else if ($data['type'] == 'float') { $type = 'FLOAT'; if(isset($data['default']) && !empty($data['default'])) { $data['default'] = (float)$data['default'];$default = ' DEFAULT \''.$data['default'].'\''; } else $default = ' DEFAULT NULL'; } else { if($data['length'] >= 16777215) { $type = 'LONGTEXT'; } else if($data['length'] > 65535) { $type = 'MEDIUMTEXT'; } else if($data['length'] >= 21812) { $type = 'TEXT';$default = ''; } else { $type = 'VARCHAR('.($data['length'] < 2 ? 255 : $data['length']).')'; $default = isset($data['default']) ? ' DEFAULT \''.$data['default'].'\'' : ''; } } $model = DB::result('SELECT * FROM xercms_model WHERE id = '.$id); $sql = 'ALTER TABLE `xercms_data_'.$model['table'].'` ADD `'.$data['name'].'` '.$type.$default; //exit($sql); DB::query($sql); if($data['index'] == 1) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD UNIQUE ( `'.$data['name'].'` )'); } else if ($data['index'] == 2) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` ADD INDEX ( `'.$data['name'].'` )'); } if(empty($model['struct'])) { $model['struct'][$data['name']] = $data; } else { $model['struct'] = json_decode($model['struct'],true); $model['struct'][$data['name']] = $data; } DB::update('xercms_model',array('struct'=>jsonSql($model['struct'])),array('id'=>$id)); self::Cache($id); return $data; } static function delfield($id,$name) { if(empty($id) || empty($name)) { return; } $model = DB::result('SELECT * FROM xercms_model WHERE id = '.$id); if(isset($model['table'])) { DB::query('ALTER TABLE `xercms_data_'.$model['table'].'` DROP COLUMN `'.$name.'`'); $model['struct'] = json_decode($model['struct'],true); if(isset($model['struct'][$name])) { unset($model['struct'][$name]); } DB::update('xercms_model',array('struct'=>jsonSql($model['struct'])),array('id'=>$id)); self::Cache($id); } } static function create($name) { $table = 'CREATE TABLE IF NOT EXISTS `xercms_data_'.$name.'` ('; $table .= '`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,'; $table .= 'PRIMARY KEY (id)) ENGINE=MyISAM DEFAULT CHARSET=utf8'; DB::query($table); DB::query('CREATE TABLE IF NOT EXISTS xercms_comment_'.$name.'(`id` bigint unsigned NOT NULL auto_increment,`uid` int(10) unsigned NOT NULL default \'0\',`aid` int(10) unsigned NOT NULL default \'0\', `fav` int(10) unsigned NOT NULL default \'0\',`say` varchar(400) NOT NULL default \'\',`ip` varchar(32) NOT NULL default \'\',`ctime` int(10) unsigned NOT NULL default \'0\',`stamp` tinyint(1) NOT NULL default \'0\',INDEX ( `aid` ),INDEX ( `uid` ),PRIMARY KEY (id)) engine=MyISAM default charset = utf8;'); } function __toString () {return '';} function __destory () {} } ?>